রেডিস রিপ্লিকেশন (Replication) একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা ডেটাবেসের ডেটা একাধিক রেডিস সার্ভারে কপি করতে সাহায্য করে। এটি মূলত ডেটা সুরক্ষা, স্কেলেবিলিটি, এবং অ্যাভেইলিবিলিটি নিশ্চিত করার জন্য ব্যবহৃত হয়। রেডিস রিপ্লিকেশন সিস্টেমের মধ্যে একটি মাস্টার সার্ভার এবং এক বা একাধিক স্লেভ সার্ভার থাকে। স্লেভ সার্ভারগুলি মাস্টার সার্ভারের ডেটা কপি করে এবং তা সিঙ্ক্রোনাইজড রাখে।
রেডিস রিপ্লিকেশন কাজ করে মাস্টার-স্লেভ আর্কিটেকচার অনুসারে:
Replication শুরু করা: স্লেভ সার্ভার মাস্টার সার্ভারের সাথে সংযুক্ত হতে SLAVEOF কমান্ড ব্যবহার করে রিপ্লিকেশন শুরু হয়।
SLAVEOF <master-ip> <master-port>
এর মাধ্যমে স্লেভ সার্ভার মাস্টার সার্ভারের ডেটার কপি গ্রহণ করতে শুরু করবে।
রেডিস রিপ্লিকেশন কনফিগারেশন মূলত redis.conf
ফাইলে করা হয়। এখানে কিছু সাধারণ কনফিগারেশন প্যারামিটার দেওয়া হলো:
SLAVEOF: স্লেভ সার্ভারে মাস্টার সার্ভারের আইপি এবং পোর্ট নির্ধারণ করতে:
slaveof <master-ip> <master-port>
Repl-disable-tcp-nodelay: যদি আপনি রিপ্লিকেশন ট্রাফিকের জন্য TCP নোডিলেকে নিষ্ক্রিয় করতে চান:
repl-disable-tcp-nodelay yes
Replica Priority: স্লেভ সার্ভারের প্রাধান্য নির্ধারণ করতে, যাতে মাস্টার সার্ভারের ব্যর্থতার পর স্লেভ সার্ভারটি মূল সার্ভার হিসেবে কাজ করতে পারে:
replica-priority 100 # 100 হলো ডিফল্ট মান
Replica-read-only: স্লেভ সার্ভারটি শুধু রিড অপারেশন করতে পারে, তবে রাইট অপারেশন নিষিদ্ধ করা হয়:
replica-read-only yes
Repl-backlog-size: রিপ্লিকেশন ব্যাকলগের আকার নির্ধারণ করা:
repl-backlog-size 1mb # রিপ্লিকেশন ব্যাকলগের সাইজ 1MB
রেডিস রিপ্লিকেশনে যদি মাস্টার সার্ভার অপ্রতুল হয়ে যায় (ফেল-ওভার), তবে স্লেভ সার্ভারটি মাস্টার সার্ভারে প্রমোট হতে পারে। রিপ্লিকেশন কনফিগারেশনটি স্বয়ংক্রিয়ভাবে মাস্টার নির্বাচনের জন্য ব্যবহৃত হতে পারে, তবে Redis Sentinel বা Redis Cluster-এর মাধ্যমে এটি আরও স্বয়ংক্রিয়ভাবে পরিচালিত হয়।
রেডিস রিপ্লিকেশন একটি মাস্টার-স্লেভ আর্কিটেকচার ব্যবহারের মাধ্যমে ডেটা ডুপ্লিকেট এবং অ্যাভেইলিবিলিটি নিশ্চিত করে। এটি স্লেভ সার্ভারগুলোকে মাস্টার সার্ভারের ডেটার কপি রেখে, রিড/রাইট অপারেশনগুলিকে আরও দক্ষ করে তোলে। Redis Sentinel বা Redis Cluster এর মাধ্যমে, স্লেভ সার্ভারটি মাস্টার সার্ভারের ব্যর্থতার পর প্রমোট হতে পারে, যা একটি উচ্চ অ্যাভেইলিবিলিটি সিস্টেম তৈরি করে।
রেডিস রেপ্লিকেশন (Redis Replication) একটি পদ্ধতি যা রেডিস সার্ভারকে ডেটার কপি তৈরি করতে এবং বৃহত্তর স্কেলেবলিটি ও উপলব্ধতা নিশ্চিত করতে সাহায্য করে। এটি মূলত একাধিক রেডিস সার্ভারের মধ্যে ডেটা শেয়ার করার প্রক্রিয়া, যেখানে একটি সার্ভার মাস্টার হিসেবে কাজ করে এবং অন্য সার্ভারগুলো স্লেভ হিসেবে ডেটা কপি করে রাখে।
রেডিস রেপ্লিকেশন প্রধানত মাস্টার-স্লেভ আর্কিটেকচার অনুসরণ করে:
রেডিস সার্ভারে রেপ্লিকেশন সেটআপ করার জন্য, আপনাকে মাষ্টার এবং স্লেভ সার্ভারের কনফিগারেশন ফাইল redis.conf
-এ কিছু পরিবর্তন করতে হবে।
মাস্টার সার্ভারের কনফিগারেশন কোনো বিশেষ পরিবর্তন ছাড়াই কার্যকরী হবে, যেহেতু এটি ডেটা রাইটিং সার্ভার। তবে, আপনি bind এবং port সেটিংস কনফিগার করে এটি কনফিগার করতে পারেন।
bind 0.0.0.0 # সমস্ত আইপি ঠিকানা থেকে কানেকশন অনুমোদন করা
port 6379 # ডিফল্ট পোর্ট
স্লেভ সার্ভারকে মাষ্টার সার্ভারের সাথে সংযোগ করার জন্য, redis.conf
ফাইলে replicaof প্যারামিটার ব্যবহার করতে হবে। স্লেভ সার্ভারের কনফিগারেশন নিচে দেওয়া হলো:
replicaof <master-ip> <master-port> # স্লেভ সার্ভারকে মাষ্টার সার্ভারের আইপি এবং পোর্ট দিয়ে সংযোগ করা
এছাড়া, আপনি password সুরক্ষা ও অন্যান্য নেটওয়ার্ক কনফিগারেশনও সেট করতে পারেন।
SLAVEOF: স্লেভ সার্ভারকে মাষ্টার সার্ভারের সাথে সংযুক্ত করতে ব্যবহার করা হয়।
SLAVEOF <master-ip> <master-port>
INFO REPLICATION: রেপ্লিকেশন সম্পর্কিত তথ্য দেখতে এই কমান্ড ব্যবহার করা হয়।
INFO REPLICATION
ROLE: রেডিস সার্ভারের ভূমিকা (মাষ্টার বা স্লেভ) জানতে এই কমান্ড ব্যবহার করা হয়।
ROLE
REPLICAOF NO ONE: মাষ্টার সার্ভারকে স্লেভ থেকে আবার স্বাধীন সার্ভার হিসেবে ফেরত আনতে ব্যবহার করা হয়।
REPLICAOF NO ONE
রেডিস রেপ্লিকেশন হল একটি শক্তিশালী কৌশল যা একাধিক সার্ভারের মধ্যে ডেটা কপি করে রাখে, ফলে আপনার সিস্টেমের উপলব্ধতা, স্কেলেবিলিটি এবং পারফরম্যান্স উন্নত হয়। এটি মাস্টার-স্লেভ আর্কিটেকচার অনুসরণ করে, যেখানে একটি মাষ্টার সার্ভার ডেটা রাইট করে এবং স্লেভ সার্ভারগুলি সেই ডেটার কপি রেখে শুধুমাত্র রিড অপারেশন সম্পাদন করে।
Redis Master-Slave Replication একটি পদ্ধতি যেখানে একটি Master সার্ভার ডেটা লেখার দায়িত্ব পালন করে, এবং এক বা একাধিক Slave সার্ভার তার ডেটা রিড (পড়ার) জন্য কপি করে। এটি মূলত ডেটা রেডান্ডেন্সি এবং লোড ব্যালেন্সিং নিশ্চিত করতে ব্যবহৃত হয়, কারণ একাধিক slave সার্ভার ক্লায়েন্টের রিড অনুরোধ হ্যান্ডেল করতে পারে, এবং master সার্ভার শুধু ডেটা লেখার কাজ করে।
রেডিসে Master-Slave Replication কনফিগার করার জন্য নিচে দেওয়া পদক্ষেপগুলো অনুসরণ করুন:
ধরা যাক, আপনার কাছে দুটি রেডিস সার্ভার রয়েছে:
Master সার্ভারে কোনো বিশেষ কনফিগারেশন পরিবর্তন করার প্রয়োজন নেই। ডিফল্টভাবে, রেডিস একটি Master সার্ভার হিসেবে কাজ করে।
redis.conf ফাইলটি এডিট করুন:
sudo nano /etc/redis/redis.conf
bind এবং protected-mode: আপনি নিশ্চিত করুন যে, bind এবং protected-mode ঠিকমতো কনফিগার করা আছে। সাধারণত, এটি রেডিস সার্ভারকে অন্যান্য সার্ভারের সাথে কানেক্ট হতে অনুমতি দেয়।
উদাহরণ:
bind 0.0.0.0 # অন্যান্য সার্ভার থেকে সংযোগ করার জন্য
protected-mode no # প্রোটেক্টেড মোড বন্ধ
Redis সার্ভার রিস্টার্ট করুন: কনফিগারেশন পরিবর্তনের পর, রেডিস সার্ভার রিস্টার্ট করতে:
sudo systemctl restart redis
redis.conf ফাইলটি এডিট করুন: এখন Slave সার্ভারে গিয়ে redis.conf
ফাইলটি এডিট করুন:
sudo nano /etc/redis/redis.conf
Master সার্ভারের IP এবং পোর্ট যোগ করুন: Slave সার্ভারে replicaof
প্যারামিটার ব্যবহার করে Master সার্ভারের IP এবং পোর্ট নির্ধারণ করুন:
replicaof <Master_IP> <Master_PORT>
উদাহরণ:
replicaof 192.168.1.100 6379
এখানে, 192.168.1.100
হলো Master সার্ভারের IP এবং 6379
হলো ডিফল্ট পোর্ট।
Redis সার্ভার রিস্টার্ট করুন: কনফিগারেশন পরিবর্তন করার পর, Slave সার্ভার রিস্টার্ট করুন:
sudo systemctl restart redis
এখন, আপনি Master এবং Slave সার্ভারের মধ্যে replication সফলভাবে কনফিগার করেছেন। এটি পরীক্ষা করার জন্য নিচের পদক্ষেপগুলি অনুসরণ করুন:
Master সার্ভারে একটি কিপেয়ার সেট করুন:
redis-cli
SET user:1 "John Doe"
Slave সার্ভারে একই কিপেয়ার চেক করুন: Slave সার্ভারে গিয়ে আপনি GET
কমান্ড ব্যবহার করে user:1
কিপেয়ারটি দেখতে পারেন:
redis-cli
GET user:1
এর উত্তর হবে:
"John Doe"
এটি দেখাবে যে, Master সার্ভারের ডেটা Slave সার্ভারে সঠিকভাবে replicate হয়েছে।
Replication সফলভাবে কনফিগার হয়েছে কিনা তা যাচাই করতে আপনি INFO replication কমান্ড ব্যবহার করতে পারেন।
Master সার্ভারে INFO replication: Master সার্ভারে এই কমান্ডটি চালান:
redis-cli INFO replication
আউটপুট কিছুটা এই রকম হতে পারে:
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.1.101,port=6379,state=online,offset=1083,lag=0
এটি দেখাবে যে, Master সার্ভারে একটি Slave সার্ভার সংযুক্ত আছে এবং এর role হচ্ছে master
।
Slave সার্ভারে INFO replication: Slave সার্ভারে একই কমান্ডটি চালান:
redis-cli INFO replication
আউটপুট হবে:
# Replication
role:slave
master_host:192.168.1.100
master_port:6379
master_link_status:up
master_sync_in_progress:0
এটি দেখাবে যে, Slave সার্ভারে role হচ্ছে slave
এবং এটি Master সার্ভারের সাথে সংযুক্ত আছে।
Slave Read/Write (SLAVEOF NO ONE): যদি আপনি চান যে, Slave সার্ভার লেখার জন্যও ব্যবহৃত হোক, তাহলে SLAVEOF NO ONE
কমান্ড দিয়ে এটি Master সার্ভারের থেকে স্বাধীনভাবে কাজ করতে পারে।
SLAVEOF NO ONE
নির্দিষ্ট পাসওয়ার্ডের সাথে সংযোগ: যদি আপনার রেডিস সার্ভারে পাসওয়ার্ড সেট করা থাকে, তবে Slave সার্ভার কনফিগারেশনে masterauth
প্যারামিটার ব্যবহার করতে হবে:
masterauth <password>
replicaof
প্যারামিটার দিয়ে Master সার্ভারের IP এবং পোর্ট নির্ধারণ করতে হবে।Replication হল একটি প্রক্রিয়া যার মাধ্যমে এক বা একাধিক ডেটাবেসের কপি তৈরি করা হয়, যাতে মূল ডেটাবেসের ডেটা একটি বা একাধিক রেপ্লিকা সার্ভারে স্বয়ংক্রিয়ভাবে সিঙ্ক্রোনাইজড থাকে। এটি Data Backup এবং Recovery এর জন্য অত্যন্ত কার্যকর একটি পদ্ধতি, কারণ রেপ্লিকেশন ব্যবহার করে আপনি ডেটার একটি কপি তৈরি করতে পারেন এবং জরুরি অবস্থায় মূল সার্ভারের ডেটা পুনরুদ্ধার করতে পারেন।
রেপ্লিকেশন ব্যবহার করে ডেটার কপি বিভিন্নভাবে তৈরি করা হতে পারে, যার মধ্যে কিছু সাধারণ ধরন হল:
রেডিস বা মাইএসকিউএল এর মতো সার্ভারে রেপ্লিকেশন কনফিগারেশন সেটআপ করার জন্য সাধারণত নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করা হয়:
bind
এবং port
সেটিংস চেক করতে হয়।log-bin
অপশন সক্রিয় করতে হয় (যাতে সার্ভার লোগিং শুরু হয়) এবং server-id
নির্ধারণ করতে হয়।server-id
নির্ধারণ করতে হয় এবং মূল সার্ভারের ঠিকানা দিয়ে master-host
কনফিগার করতে হয়।read-only
সেটিংস সক্ষম করতে হয় (যাতে এটি শুধুমাত্র ডেটা পড়ে, পরিবর্তন না করে)।START SLAVE
কমান্ড ব্যবহার করতে হয়।SHOW SLAVE STATUS
কমান্ড ব্যবহার করা হয় (মাইএসকিউএল-এ) বা INFO replication
(রেডিস-এ)।রেপ্লিকেশন ব্যাকআপ প্রক্রিয়াতে সহায়তা করতে পারে, কারণ রেপ্লিকা সার্ভারে সর্বশেষ ডেটা কপি রাখা হয়। মূল সার্ভারের ডেটা যদি কোনো কারণে হারিয়ে যায়, তবে আপনি রেপ্লিকা সার্ভার থেকে ডেটা পুনরুদ্ধার করতে পারেন। এখানে কিছু বিষয় যা মনে রাখতে হবে:
রেপ্লিকেশন ব্যবহারের মাধ্যমে Data Recovery অত্যন্ত সহজ হয়। যদি মূল সার্ভারে কোনো ধরনের সমস্যা হয় বা ডেটা হারিয়ে যায়, তাহলে নিম্নলিখিত পদক্ষেপে ডেটা পুনরুদ্ধার করা সম্ভব:
STOP SLAVE
এবং START SLAVE
কমান্ড ব্যবহার করে রেপ্লিকেশন পুনরায় শুরু করতে পারেন।Replication হল একটি গুরুত্বপূর্ণ ডেটা ব্যাকআপ এবং পুনরুদ্ধার প্রক্রিয়া, যা ডেটাবেসে একটি মূল সার্ভার এবং এক বা একাধিক রেপ্লিকা সার্ভারের মধ্যে ডেটার কপি তৈরি করে। এটি ডেটা সুরক্ষা, উচ্চ প্রাপ্যতা এবং বিপর্যয় পুনরুদ্ধারের জন্য একটি কার্যকরী সমাধান। রেপ্লিকেশন ব্যবহার করে, আপনি ডেটার কপি সহজেই ব্যাকআপ এবং পুনরুদ্ধার করতে পারেন, যা সিস্টেমের স্থিতিশীলতা এবং কর্মক্ষমতা নিশ্চিত করে।
Read-Write Splitting এবং High Availability হল দুটি গুরুত্বপূর্ণ কনসেপ্ট যা সাধারণত ডেটাবেস আর্কিটেকচার ও স্কেলেবিলিটি নিশ্চিত করতে ব্যবহৃত হয়। এই দুটি কৌশল ব্যবহৃত হয় যাতে ডেটাবেসের পারফরম্যান্স বৃদ্ধি পায় এবং এর সার্ভিস প্রদান করা যায় নিরবচ্ছিন্নভাবে, বিশেষত বৃহৎ পরিসরের অ্যাপ্লিকেশনে। নিচে এই দুটি কনসেপ্টের বিস্তারিত আলোচনা করা হলো।
Read-Write Splitting হল একটি কৌশল যা ডেটাবেসে রিড (পড়ার) এবং রাইট (লেখার) অপারেশনগুলো পৃথকভাবে পরিচালনা করতে সহায়তা করে। সাধারণত, এই কৌশলটি প্রধান ডেটাবেস সার্ভার (Master) এবং ক্লাস্টারড রিড-অনলি ডেটাবেস সার্ভার (Replica) এর মধ্যে বিভক্ত করা হয়।
High Availability (HA) হল এমন একটি ব্যবস্থা বা কৌশল যা নিশ্চিত করে যে আপনার ডেটাবেস বা সার্ভিসটি সর্বদা উপলব্ধ থাকবে এবং কোনোভাবে ডাউন টাইম বা সিস্টেমের অচলাবস্থা থাকবে না। HA সাধারণত ফেলওভার এবং ডুপ্লিকেশন কৌশল ব্যবহার করে সিস্টেমের স্থিতিশীলতা এবং সার্ভিস অব্যাহত রাখে।
বৈশিষ্ট্য | Read-Write Splitting | High Availability (HA) |
---|---|---|
উদ্দেশ্য | রিড এবং রাইট অপারেশন আলাদা সার্ভারে ভাগ করা | সার্ভিসের অব্যাহত উপলব্ধতা এবং ডাউনটাইম কমানো |
পদ্ধতি | Master-Slave (Read-Replica) Configuration | Failover, Replication, Heartbeat |
ফায়দা | পারফরম্যান্স বৃদ্ধি, লোড ভারসাম্য | সার্ভিস স্থিতিশীলতা, ব্যর্থতায় অটোমেটিক রিকভারি |
চ্যালেঞ্জ | ডেটা সিঙ্ক্রোনাইজেশন সমস্যা, Eventual Consistency | Failover তে ডেটা কনসিসটেন্সি সমস্যা |
প্রধান লক্ষ্য | রিড অপারেশনগুলোর জন্য আলাদা সার্ভার ব্যবহার | সার্ভিস সর্বদা উপলব্ধ রাখা |
এটি গুরুত্বপূর্ণ যে Read-Write Splitting এবং High Availability একসাথে ব্যবহৃত হতে পারে একটি সিস্টেমে, যাতে পারফরম্যান্স বৃদ্ধি এবং সার্ভিস অব্যাহত রাখতে সাহায্য করা যায়।
Read more